私は最近 Go の UTF-8 サポートを調査しており、コード内で非ラテン語スクリプトがどの程度適切に処理されるかについて興味がありました。
UTF-8 を使用してください
Go ソース ファイルはデフォルトで UTF-8 でエンコードされます。これは、理論上、変数名や関数名などに Unicode 文字を使用できることを意味します。
たとえば、公式 Go プレイグラウンドの定型コードでは、次のようなコードが見つかる可能性があります。
ここで、消息は中国語で「メッセージ」を意味します。 Go は Unicode サポートのおかげで、これを問題なく処理します。この機能は、Go が中国や日本などの国で人気を集めている理由の 1 つであり、開発者は自国の言語で意味のある識別子を使用してコードを作成できます。信じられないかもしれませんが、中国では母国語でコードを書くことが非常に人気があり、私はそれが大好きです。
タミル語識別子を使用しようとしています
当然、母国語であるタミル語でこれを試してみたかったのです。
これが私が書いた簡単な例です:
一見すると、これはエラーなしで実行できる簡単なように見えます。
しかし、コードをコンパイルしようとするとエラーが発生しました
タミル語結合記号の問題を理解する
何が起こっているのかを理解するには、タミル語文字がどのように機能するかを少し知ることが不可欠です。
タミル語は アブギダ、つまり各子音と母音のシーケンスが単位として書かれる表記法です。 Unicode では、これには多くの場合、基本子音文字と、母音やその他の修飾子を表す 1 つ以上の結合記号を組み合わせることが含まれます。
例:
タミル語の文字 க (U 0B95) は子音「ka」を表します
「き」を表すには、க と母音記号 ி (U 0BBF) を組み合わせて、கி となります。
母音記号 ி は結合記号であり、特に Unicode では「非スペース記号」として分類されます。
ここで問題が発生します。
Go の言語仕様では、識別子に Unicode 文字を使用できますが、結合記号は除外されています。具体的には、識別子には、「文字」として分類される文字 (カテゴリ Lu、Ll、Lt、Lm、Lo、または Nl) と数字を含めることができますが、結合記号 (カテゴリ Mn、Mc、Me) は含めることはできません。
タミル語での記号の組み合わせの例
タミル文字がどのように形成されるかを見てみましょう:
スタンドアロン子音: க (U 0B95) - Go 識別子で許可されます。
子音母音記号: கா (U 0B95 U 0BBE) - ா (U 0BBE) は結合記号 (Mc) であるため許可されません。
子音母音記号: கி (U 0B95 U 0BBF) - ி (U 0BBF) は結合記号 (Mn) であるため許可されません。
子音母音記号: கூ (U 0B95 U 0BC2) - ூ (U 0BC2) は結合記号 (Mc) であるため許可されません。
識別子 எண்ணிக்கை (「数値」) の文字には結合記号が含まれます。
எ (U 0B8E) - 手紙、許可されています。
ண் (U 0BA3 U 0BCD) - ண (U 0BA3) と virama ் (U 0BCD)、結合記号 (Mn) によって形成されます。
ண (U 0BA3) - 手紙、許可されています。
ிக்கை - ி (U 0BBF) や ை (U 0BC8) などの結合記号が含まれます。
これらの結合マークは Go 識別子では許可されないため、コンパイラーはそれらを検出するとエラーをスローします。
なぜ漢字は機能するのにタミル語は機能しないのか
漢字は通常、Unicode では「文字、その他」(Lo) カテゴリに分類されます。これらはスタンドアロンのシンボルであり、完全な文字を形成するためにマークを組み合わせる必要はありません。これが、消息のような識別子が Go で完璧に機能する理由です。
実際的な意味
識別子で結合マークを使用できないことは、タミル語のような文字に重大な影響を及ぼします。
表現力の制限: マークを結合しないと、タミル語で意味のある識別子を記述することはほぼ不可能です。
教育上の障壁: ネイティブ スクリプトを使用するとコードの学習が容易になりますが、特に abugida ベースの書記体系に従う言語では、これらの制限がその可能性を妨げます。
包括性の課題: Go は UTF-8 サポートにより包括性を目指していますが、マークの結合に関する制限により、マークに依存する多くの言語が除外されます。
まとめ
Go の UTF-8 サポートは、プログラミングをより包括的なものにするための大きな一歩です。ただし、識別子で結合マークを除外すると、タミル語、ヒンディー語、アラビア語など、結合マークがスクリプトに不可欠な言語では障壁が生じます。
タミルナドゥ出身の開発者として、主に Go で働いていましたが、この発見は刺激的であり、少し残念でもありました。これは、プログラミング言語における真の国際化の複雑さを浮き彫りにしています。
ソフトウェア製品を構築するために母国語でコーディングするのは誰ですか?!!!!
もちろんです!東アジア地域は例外ではなく、「アブギダ」ベースの文字体系が採用されていません。
そして明らかに、Go の作成者は、最初から「ネイティブ言語コーディング」に UTF-8 準拠を意図していなかったでしょう。その理由は、より優れた ASCII 処理、最新の Web 標準との整合、一貫した文字列処理、および相互運用性への一歩を提供することにありました。
この試みは、Go で UTF-8 準拠をどこまで実現できるかを理解するという私の単なる好奇心でした。 Go でスケーラブルな分散フィンテック システムの構築に取り組んでいる者として、私はこれらのニュアンスを認識することが不可欠であると感じました。
以上です。最後までお読みいただきありがとうございます。
コーディングを楽しんでください :) コードがあなたとともにありますように。
以上がGo の UTF サポート: 興味深い制限の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

GOのコア機能には、ガベージコレクション、静的リンク、並行性サポートが含まれます。 1. GO言語の並行性モデルは、GoroutineとChannelを通じて効率的な同時プログラミングを実現します。 2.インターフェイスと多型は、インターフェイスメソッドを介して実装されているため、異なるタイプを統一された方法で処理できます。 3.基本的な使用法は、関数定義と呼び出しの効率を示しています。 4。高度な使用法では、スライスは動的なサイズ変更の強力な機能を提供します。 5.人種条件などの一般的なエラーは、Getest Raceを通じて検出および解決できます。 6.パフォーマンス最適化Sync.Poolを通じてオブジェクトを再利用して、ゴミ収集圧力を軽減します。

GO言語は、効率的でスケーラブルなシステムの構築においてうまく機能します。その利点には次のものがあります。1。高性能:マシンコードにコンパイルされ、速度速度が速い。 2。同時プログラミング:ゴルチンとチャネルを介してマルチタスクを簡素化します。 3。シンプルさ:簡潔な構文、学習コストとメンテナンスコストの削減。 4。クロスプラットフォーム:クロスプラットフォームのコンパイル、簡単な展開をサポートします。

SQLクエリの結果の並べ替えについて混乱しています。 SQLを学習する過程で、しばしば混乱する問題に遭遇します。最近、著者は「Mick-SQL Basics」を読んでいます...

テクノロジースタックの収束とテクノロジーの選択の関係ソフトウェア開発におけるテクノロジーの選択、テクノロジースタックの選択と管理は非常に重要な問題です。最近、一部の読者が提案しています...

ゴーラン...

GO言語で3つの構造を比較および処理する方法。 GOプログラミングでは、2つの構造の違いを比較し、これらの違いを...

Goでグローバルにインストールされたパッケージを表示する方法は? GO言語で開発する過程で、GOはしばしば使用します...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

WebStorm Mac版
便利なJavaScript開発ツール
