Kể từ phiên bản Golang 1.18, tính năng dự kiến có tên generics sẽ được thêm vào ngôn ngữ. Chúng tôi sẽ thực hành tính năng này, từ cách tiếp cận cũ trong Go trước phiên bản 1.18 (ví dụ: phiên bản 1.17), sau đó chúng tôi sử dụng tính năng tổng quát hỗ trợ cú pháp mới. Trong các đoạn mã dưới đây, chúng tôi sử dụng phiên bản Golang mới nhất tại thời điểm viết (Phiên bản Go 1.20.2)
Thêm sinh viên theo tên đầy đủ
Cách cũ (Golang 1.17): Thêm sinh viên theo mảng, lát mà không cần tổng quát
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">string</span> <span class="token punctuation">,</span> student <span class="token builtin">string</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">append</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> student <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> students <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> result <span class="token operator">:=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> <span class="token string">"Nguyen Thanh Van"</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token string">"Nguyen Tri Hung"</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token string">"Pham Van Tam"</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// Result</span> <span class="token comment">// [Nguyen Thanh Van Nguyen Tri Hung Pham Van Tam]</span> |
Thêm sinh viên theo id
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">string</span> <span class="token punctuation">,</span> student <span class="token builtin">string</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">append</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> student <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">addStudentID</span> <span class="token punctuation">(</span> studentIDs <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">int</span> <span class="token punctuation">,</span> studentId <span class="token builtin">int</span> <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">append</span> <span class="token punctuation">(</span> studentIDs <span class="token punctuation">,</span> studentId <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> studentIDs <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> result <span class="token operator">:=</span> <span class="token function">addStudentID</span> <span class="token punctuation">(</span> studentIDs <span class="token punctuation">,</span> <span class="token number">32</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudentID</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token number">33</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudentID</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token number">34</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// Result</span> <span class="token comment">// [32 33 34]</span> |
Thêm sinh viên theo cấu trúc
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 | <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">addStudentStrut</span> <span class="token punctuation">(</span> studentStructs <span class="token punctuation">[</span> <span class="token punctuation">]</span> StudentStruct <span class="token punctuation">,</span> st StudentStruct <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> StudentStruct <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">append</span> <span class="token punctuation">(</span> studentStructs <span class="token punctuation">,</span> st <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> StudentStruct <span class="token keyword">struct</span> <span class="token punctuation">{</span> Name <span class="token builtin">string</span> ID <span class="token builtin">int</span> Age <span class="token builtin">int</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> students <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> StudentStruct <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result <span class="token operator">:=</span> <span class="token function">addStudentStrut</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> StudentStruct <span class="token punctuation">{</span> <span class="token string">"Nguyen Dieu An"</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">35</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudentStrut</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> StudentStruct <span class="token punctuation">{</span> <span class="token string">"Tran Van Thuong"</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">30</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudentStrut</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> StudentStruct <span class="token punctuation">{</span> <span class="token string">"Le Van Tam"</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">25</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// Result</span> <span class="token comment">// [{Nguyen Dieu An 1 35} {Tran Van Thuong 2 30} {Le Van Tam 3 25}]</span> |
Thêm sinh viên theo thuốc generic
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 | <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">type</span> Stringer <span class="token operator">=</span> <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">String</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> Integer <span class="token builtin">int</span> <span class="token keyword">func</span> <span class="token punctuation">(</span> i Integer <span class="token punctuation">)</span> <span class="token function">String</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> fmt <span class="token punctuation">.</span> <span class="token function">Sprintf</span> <span class="token punctuation">(</span> <span class="token string">"%d"</span> <span class="token punctuation">,</span> i <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> String <span class="token builtin">string</span> <span class="token keyword">func</span> <span class="token punctuation">(</span> s String <span class="token punctuation">)</span> <span class="token function">String</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">string</span> <span class="token punctuation">(</span> s <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> Student <span class="token keyword">struct</span> <span class="token punctuation">{</span> Name <span class="token builtin">string</span> ID <span class="token builtin">int</span> Age <span class="token builtin">int</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span> s Student <span class="token punctuation">)</span> <span class="token function">String</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> fmt <span class="token punctuation">.</span> <span class="token function">Sprintf</span> <span class="token punctuation">(</span> <span class="token string">"%s %d %d"</span> <span class="token punctuation">,</span> s <span class="token punctuation">.</span> Name <span class="token punctuation">,</span> s <span class="token punctuation">.</span> ID <span class="token punctuation">,</span> s <span class="token punctuation">.</span> Age <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> addStudent <span class="token punctuation">[</span> T Stringer <span class="token punctuation">]</span> <span class="token punctuation">(</span> students <span class="token punctuation">[</span> <span class="token punctuation">]</span> T <span class="token punctuation">,</span> student T <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> T <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">append</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> student <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> students <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> String <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result <span class="token operator">:=</span> addStudent <span class="token punctuation">[</span> String <span class="token punctuation">]</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> <span class="token string">"Nguyen Dieu An"</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> addStudent <span class="token punctuation">[</span> String <span class="token punctuation">]</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token string">"Tran Van Thuong"</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> addStudent <span class="token punctuation">[</span> String <span class="token punctuation">]</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token string">"Le Van Tam"</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result <span class="token punctuation">)</span> students1 <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> Integer <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result1 <span class="token operator">:=</span> addStudent <span class="token punctuation">[</span> Integer <span class="token punctuation">]</span> <span class="token punctuation">(</span> students1 <span class="token punctuation">,</span> <span class="token number">35</span> <span class="token punctuation">)</span> result1 <span class="token operator">=</span> addStudent <span class="token punctuation">[</span> Integer <span class="token punctuation">]</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">,</span> <span class="token number">30</span> <span class="token punctuation">)</span> result1 <span class="token operator">=</span> addStudent <span class="token punctuation">[</span> Integer <span class="token punctuation">]</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">,</span> <span class="token number">25</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">)</span> students3 <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> Student <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result3 <span class="token operator">:=</span> addStudent <span class="token punctuation">[</span> Student <span class="token punctuation">]</span> <span class="token punctuation">(</span> students3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Nguyen Dieu An"</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">35</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> result3 <span class="token operator">=</span> addStudent <span class="token punctuation">[</span> Student <span class="token punctuation">]</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Tran Van Thuong"</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">30</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> result3 <span class="token operator">=</span> addStudent <span class="token punctuation">[</span> Student <span class="token punctuation">]</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Le Van Tam"</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">25</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// Result</span> <span class="token comment">// [Nguyen Dieu An Tran Van Thuong Le Van Tam]</span> <span class="token comment">// [35 30 25]</span> <span class="token comment">// [Nguyen Dieu An 1 35 Tran Van Thuong 2 30 Le Van Tam 3 25]</span> |
Chúng ta cần xác định giao diện theo cách này: Bất kỳ loại nào triển khai hàm String()
đều có thể được coi là thuộc loại Stringer
.
Nhỏ gọn hơn: loại bỏ khai báo kiểu rõ ràng của hàm chung
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 | <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">type</span> Stringer <span class="token operator">=</span> <span class="token keyword">interface</span> <span class="token punctuation">{</span> <span class="token function">String</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> Integer <span class="token builtin">int</span> <span class="token keyword">func</span> <span class="token punctuation">(</span> i Integer <span class="token punctuation">)</span> <span class="token function">String</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> fmt <span class="token punctuation">.</span> <span class="token function">Sprintf</span> <span class="token punctuation">(</span> <span class="token string">"%d"</span> <span class="token punctuation">,</span> i <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> String <span class="token builtin">string</span> <span class="token keyword">func</span> <span class="token punctuation">(</span> s String <span class="token punctuation">)</span> <span class="token function">String</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">string</span> <span class="token punctuation">(</span> s <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">type</span> Student <span class="token keyword">struct</span> <span class="token punctuation">{</span> Name <span class="token builtin">string</span> ID <span class="token builtin">int</span> Age <span class="token builtin">int</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token punctuation">(</span> s Student <span class="token punctuation">)</span> <span class="token function">String</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> fmt <span class="token punctuation">.</span> <span class="token function">Sprintf</span> <span class="token punctuation">(</span> <span class="token string">"%s %d %d"</span> <span class="token punctuation">,</span> s <span class="token punctuation">.</span> Name <span class="token punctuation">,</span> s <span class="token punctuation">.</span> ID <span class="token punctuation">,</span> s <span class="token punctuation">.</span> Age <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> addStudent <span class="token punctuation">[</span> T Stringer <span class="token punctuation">]</span> <span class="token punctuation">(</span> students <span class="token punctuation">[</span> <span class="token punctuation">]</span> T <span class="token punctuation">,</span> student T <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> T <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">append</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> student <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> students <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> String <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result <span class="token operator">:=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> <span class="token string">"Nguyen Dieu An"</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token string">"Tran Van Thuong"</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token string">"Le Van Tam"</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result <span class="token punctuation">)</span> students1 <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> Integer <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result1 <span class="token operator">:=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students1 <span class="token punctuation">,</span> <span class="token number">35</span> <span class="token punctuation">)</span> result1 <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">,</span> <span class="token number">30</span> <span class="token punctuation">)</span> result1 <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">,</span> <span class="token number">25</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">)</span> students3 <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> Student <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result3 <span class="token operator">:=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Nguyen Dieu An"</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">35</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> result3 <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Tran Van Thuong"</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">30</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> result3 <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Le Van Tam"</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">25</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// Result</span> <span class="token comment">// [Nguyen Dieu An Tran Van Thuong Le Van Tam]</span> <span class="token comment">// [35 30 25]</span> <span class="token comment">// [Nguyen Dieu An 1 35 Tran Van Thuong 2 30 Le Van Tam 3 25]</span> |
Loại lỏng lẻo theo từ khóa any
trong hàm generic
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 | <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">type</span> Student <span class="token keyword">struct</span> <span class="token punctuation">{</span> Name <span class="token builtin">string</span> ID <span class="token builtin">int</span> Age <span class="token builtin">int</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> addStudent <span class="token punctuation">[</span> T any <span class="token punctuation">]</span> <span class="token punctuation">(</span> students <span class="token punctuation">[</span> <span class="token punctuation">]</span> T <span class="token punctuation">,</span> student T <span class="token punctuation">)</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> T <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">append</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> student <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> students <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">string</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result <span class="token operator">:=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students <span class="token punctuation">,</span> <span class="token string">"Nguyen Dieu An"</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token string">"Tran Van Thuong"</span> <span class="token punctuation">)</span> result <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result <span class="token punctuation">,</span> <span class="token string">"Le Van Tam"</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result <span class="token punctuation">)</span> students1 <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> <span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result1 <span class="token operator">:=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students1 <span class="token punctuation">,</span> <span class="token number">35</span> <span class="token punctuation">)</span> result1 <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">,</span> <span class="token number">30</span> <span class="token punctuation">)</span> result1 <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">,</span> <span class="token number">25</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result1 <span class="token punctuation">)</span> students3 <span class="token operator">:=</span> <span class="token punctuation">[</span> <span class="token punctuation">]</span> Student <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token comment">// Empty slice</span> result3 <span class="token operator">:=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> students3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Nguyen Dieu An"</span> <span class="token punctuation">,</span> <span class="token number">1</span> <span class="token punctuation">,</span> <span class="token number">35</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> result3 <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Tran Van Thuong"</span> <span class="token punctuation">,</span> <span class="token number">2</span> <span class="token punctuation">,</span> <span class="token number">30</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> result3 <span class="token operator">=</span> <span class="token function">addStudent</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">,</span> Student <span class="token punctuation">{</span> <span class="token string">"Le Van Tam"</span> <span class="token punctuation">,</span> <span class="token number">3</span> <span class="token punctuation">,</span> <span class="token number">25</span> <span class="token punctuation">}</span> <span class="token punctuation">)</span> fmt <span class="token punctuation">.</span> <span class="token function">Println</span> <span class="token punctuation">(</span> result3 <span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// Result</span> <span class="token comment">// [Nguyen Dieu An Tran Van Thuong Le Van Tam]</span> <span class="token comment">// [35 30 25]</span> <span class="token comment">// [Nguyen Dieu An 1 35 Tran Van Thuong 2 30 Le Van Tam 3 25]</span> |
Phần kết luận
Chúng tôi trải qua các giai đoạn:
- Thêm Sinh viên bằng các hàm riêng biệt theo kiểu dữ liệu cụ thể: số nguyên, chuỗi, cấu trúc
- Xác định giao diện, sau đó sử dụng Generics
- Sử dụng Generics và loại bỏ loại rõ ràng (cú pháp nhỏ gọn)
- Sử dụng Generics để nới lỏng nhất bằng cách sử dụng khóa
any
, không hạn chế đối với một số loại cụ thể, cho tất cả các loại. Lợi ích chúng ta đã thấy, mã nguồn trở nên gọn nhẹ, có thể tái sử dụng dễ dàng.