forked from RedHatOfficial/GoCourse
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgo_python_ru.slide
More file actions
141 lines (81 loc) · 3.25 KB
/
go_python_ru.slide
File metadata and controls
141 lines (81 loc) · 3.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
Вызов Go из Python
Lesson Special
01 Jan 2023
Tags: golang, go, python
Pavel Tišnovský
Red Hat, Inc.
ptisnovs@redhat.com
https://github.com/RedHatOfficial/GoCourse
@RedHat
* Sources
- [[https://github.com/RedHatOfficial/GoCourse]]
.image ./common/qr_address.png
* Gophers
#The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/)
#Source https://golang.org/doc/gopher/fiveyears.jpg
#The design and this image is licensed under the Creative Commons 3.0 Attributions license.
.image ./common/fiveyears.jpg _ 900
* Go + Python
.image ./common/golang.png
.image ./common/python.png
* Два разных мира
- Python поддерживает FFI, cffi, ctypes и т.д.
- Можно скомпилировать Go библиотеку в .so/.dll
- интеграция кажется простой
- Но
- на самом деле интеграция основана на общей основе: C
- разные типы данных
- совершенно разные структуры данных
- GC с обеих сторон! (разные)
- Давайте сначала попробуем более удобные подходы
* Шаг #1: как интегрировать Go с C
- Go библиотека с экспортированной функцией
- Компиляция в разделяемую библиотеку (DLL, so)
- Загрузка библиотеки в C
* Go библиотека
.code go_python/example1.go
* Компиляция и сборка библиотеки
go build -buildmode=c-shared example1.go
* Загрузка Go библиотеки из C (1/2)
.code go_python/example1A.c
* Загрузка Go библиотеки из C (2/2)
.code go_python/example1B.c
* Компиляция и сборка
gcc -ansi example1.c -ldl
* Шаг 2: теперь используем Python вместо C
* Системная библиотека (или LD_LIBRARY_PATH)
.code go_python/example1A.py
* Локальная библиотека
.code go_python/example1B.py
* Возможны функции `main` и `init`
.code go_python/example2.go
* Go функция с параметрами и возвращаемым значением
.code go_python/example3.go
* Вызов из Python
.code go_python/example3A.py
* Общие проблемы
.code go_python/example3B.py
.code go_python/example3C.py
* Системно-независимые типы данных
.code go_python/example4.go
* Сторона Python
.code go_python/example4A.py
* Максимальные значения
.code go_python/example4B.py
.code go_python/example4C.py
* Передача строк в Go
.code go_python/example5.go
* Строки на стороне Python
.code go_python/example5.py
* Тип `*C.char`
.code go_python/example6.go
* Строки на стороне Python
.code go_python/example6A.py
.code go_python/example6B.py
.code go_python/example6C.py
#last slide
* Больше Gophers
#The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/)
#Source https://golang.org/doc/gopher/bumper.png
#The design and this image is licensed under the Creative Commons 3.0 Attributions license.
.image ./common/bumper.png _ 900